home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
progtool
/
c
/
egem_210
/
egem
/
source
/
filetool.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-11-25
|
2KB
|
145 lines
#include "proto.h"
#include <string.h>
#define strclr(p) *p = '\0'
static char *strend(reg char *str)
{
while (*str++);
return (--str);
}
static char *yen2slash(char *p)
{
reg char *d = p,c,s;
s = '/';
while ((c=*d++)!='\0')
if (c==s)
d[-1]='\\';
s = '\\';
d = p;
while ((c=*d++)!='\0')
{
if (c==s && *d==s)
{
d--;
strcpy(d,d+1);
}
}
return (p);
}
char *GetFilename(char *path)
{
reg char *p,*q;
p = q = yen2slash(path);
while ((q=strpbrk(p,":\\"))!=NULL)
{
q++;
p = q;
}
if (!strcmp(p,".") || !strcmp(p,".."))
{
p = strend(p);
*p++ = '\\';
*p = '\0';
}
else if (p>path && p[-1]==':')
{
*p++ = '\\';
*p = '\0';
}
return (p);
}
char *GetPath(char *fname)
{
reg char *file = GetFilename(fname);
strclr(file);
return (file);
}
char *GetExtension(char *path)
{
reg char *p,*q;
p = GetFilename(path);
if ((q=strrchr(p,'.'))>=p)
return (q);
else
return (strend(p));
}
int GetDrive(char *path)
{
if (path[0]!='\0' && path[1]==':')
return (UpperChar(path[0]) - 'A');
else
return (Dgetdrv());
}
char *MakeFullpath(char *dest,char *path,char *file)
{
reg char *last;
if (path)
strcpy(dest,path);
yen2slash(dest);
if ((last=strend(dest))>dest && last[-1]!='\\')
{
*last++ = '\\';
strcpy(last,file);
}
else
strcat(dest,file);
return (dest);
}
int FileSelect(char *title,char *path,char *fname,char *sel,int no_insel)
{
int button,err;
if (sel==NULL || *sel=='\0')
sel = "*.*";
if (no_insel)
strclr(fname);
MakeFullpath(path,NULL,sel);
if (aes_version>=0x0140 || get_cookie((long) 'FSEL',NULL))
err = fsel_exinput(path,fname,&button,title);
else
err = fsel_input(path,fname,&button);
_reset_mouse();
if (err && button)
{
GetPath(path);
return (TRUE);
}
else
return (FALSE);
}
void drive_changed(int drive)
{
int msg[8];
if (drive==('U'-'A'))
drive = -1;
msg[0] = SH_WDRAW;
msg[3] = drive;
XAccBroadCast(msg);
}